import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class text1 {
    //扫描指定目录，找到所有指定字符的文件并返回
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("指定你要查找的目录: ");
        String path = sc.nextLine();

        File file = new File(path);

        if (!file.isDirectory()) {
            System.out.println("不是文件夹");
            return;
        }
        
        //输入查询的字符
        System.out.println("请输入你要查询的字符: ");

        String target = sc.nextLine();
        ArrayList<File> files = new ArrayList<>();
        getPath(file, target,files);

        for (File f : files) {
            System.out.println(f.getPath());
        }

        while (true) {
            System.out.println("是否要删除指定文件 y /n");

            String is = sc.nextLine();
            if (is.charAt(0) == 'n') {
                break;
            }

            //F:\text
            System.out.println("输入要删除的路径");
            String del = sc.nextLine();

            //删除
            System.out.println(del);
            File file1 = new File(del);

            //？？？ 没有关流
            System.out.println(file1.delete());
        }

    }

    private static void getPath(File file, String target, ArrayList<File> files) {
        if (file == null) {
            return;
        }
        //遍历当前文件夹
        for (File f:file.listFiles()) {
            //如果还是文件夹的话就继续递归下去 类似前序遍历
            if(f.isDirectory()) {
                getPath(f,target,files);
            }
            if (f.getName().contains(target)) {
                //将这个路径添加到顺序表中
                files.add(f);
            } else if (getPath2(f,target)) {
                //读取内容判断是否存在指定的内容
                files.add(f);
            }
        }
    }

    private static boolean getPath2(File f, String target) {
        int i = 0;
        try (FileReader reader = new FileReader(f);
             Scanner sc = new Scanner(reader);
        ){
            while (true) {
                if (sc.hasNextLine()) {
                    String s = sc.nextLine();
                    if (s.contains(target)) {
                        return true;
                    }
                } else {
                    break;
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return false;
    }
}
